var QueryForm;
var QueryWindows;
var ProvokeStore;
/*
 * 查询窗口
 */
var BuildQueryWindows = function() {
	QueryWindows = new Ext.Window({
				title : '~ 查询窗口 (请选择查询条件)~',
				width : 500,
				heigth : 400,
				resizable : false,
				modal : true,
				closeAction : 'hide',
				items : [QueryForm],
				buttons : [{
							iconCls : 'query',
							text : '查询',
							handler : Query
						}, {
							iconCls : 'empty',
							text : '清空',
							handler : function() {
								QueryForm.getForm().reset();
							}
						}],
				buttonAlign : 'center'
			})
}

/*
 * 建立查询表单的界面布局
 */
var BuildQueryForm = function() {
	QueryForm = new Ext.form.FormPanel({
		labelAlign : 'right',
		labelWidth : 70,
		width : '100%',
		bodyStyle : 'padding:20px 10px;',
		items : [{
			layout : 'column',
			border : false,
			items : [{
						bodyStyle : 'padding-top:5px',
						columnWidth : .5,
						layout : 'form',
						defaults : {
							width : 130
						},
						defaultType : 'textfield',
						items : [{
									fieldLabel : '资产编号',
									name : 'assetNo'
								}, {
									fieldLabel : '资产类别',
									name : 'type',
									xtype : 'combo',
									store : new Ext.data.Store({
												proxy : new Ext.data.HttpProxy(
														{
															url : '/FAM/getAssetType'
														}),// 从数据库取数据 -- 未完成
												reader : new Ext.data.JsonReader(
														{
															root : 'type'
														}, ['type']), // 匹配数据库中的字段
												autoLoad : false
											}),
									emptyText : '请选择',
									mode : 'remote',
									triggerAction : 'all',
									valueField : 'type', // typt应该与数据库中的字段相同
									displayField : 'type'
								}]
					}, {
						bodyStyle : 'padding-top:5px',
						columnWidth : .5,
						style : 'margin-left: 15px;',
						layout : 'form',
						defaults : {
							width : 130
						},
						defaultType : 'textfield',
						items : [{
							fieldLabel : '使用部门',
							name : 'department',
							xtype : 'combo',
							store : new Ext.data.Store({
										proxy : new Ext.data.HttpProxy({
													url : '/FAM/DictInfoServlet'
												}),// 从数据库取数据 -- 未完成
										reader : new Ext.data.JsonReader({
													root : 'department'
												}, ['name']), // 匹配数据库中的字段
										autoLoad : false
									}),
							emptyText : '请选择',
							mode : 'remote',
							triggerAction : 'all',
							valueField : 'name', // text应该与数据库中的字段相同，暂时用text替代
							displayField : 'name'
						}, {
							fieldLabel : '资产状态',
							name : 'status',
							xtype : 'combo',
							store : new Ext.data.SimpleStore({
										fields : ['text'],
										data : [['在用'], ['报损'], ['出售']]
									}),
							emptyText : '请选择',
							mode : 'local',
							triggerAction : 'all',
							valueField : 'text',
							displayField : 'text',
							readOnly : true
						}]
					}]
		}]
	})
}

/*
 * 通过查询条件连接数据库得到数据 --- 未完成
 * 
 */
var Query = function() {

	ProvokeStore.baseParams['start'] = '0';
	ProvokeStore.baseParams['limit'] = '15';
	ProvokeStore.baseParams['assetNo'] = QueryForm.form.findField('assetNo')
			.getValue();
	ProvokeStore.baseParams['type'] = QueryForm.form.findField('type')
			.getValue();
	ProvokeStore.baseParams['status'] = QueryForm.form.findField('status')
			.getValue();
	ProvokeStore.baseParams['department'] = QueryForm.form
			.findField('department').getValue();

	QueryWindows.hide();
	ProvokeStore.reload();
}

var BulidLayout = function() {
	/*
	 * 存放资产信息的GridPanel布局
	 */
	var ProvokeColumnModel = new Ext.grid.ColumnModel([
			new Ext.grid.RowNumberer(), {
				header : '资产编号',
				sortable : true,
				dataIndex : 'assetNo'
			}, {
				header : '设备名称',
				sortable : true,
				dataIndex : 'name'
			}, {
				header : '资产类别',
				sortable : true,
				dataIndex : 'type'
			}, {
				header : '使用部门',
				sortable : true,
				dataIndex : 'department'
			}, {
				header : '设备型号',
				sortable : true,
				dataIndex : 'model'
			}, {
				header : '设备状态',
				sortable : true,
				dataIndex : 'status'
			}, {
				header : '原使用单位',
				sortable : true,
				dataIndex : 'originalUnit'
			}, {
				header : '现使用单位',
				sortable : true,
				dataIndex : 'nowUnit'
			}, {
				header : '变动类别',
				sortable : true,
				dataIndex : 'changesType'
			}, {
				header : '调拨时间',
				sortable : true,
				dataIndex : 'changeTime',
				type : 'date',
				renderer : Ext.util.Format.dateRenderer('Y年m月d日')
			}

	])

	var ProvokeRecord = new Ext.data.Record.create([{
				name : 'assetNo'
			}, {
				name : 'name'
			}, {
				name : 'type'
			}, {
				name : 'originalPrincipal'
			}, {
				name : 'nowPrincipal'
			}, {
				name : 'changeType'
			}, {
				name : 'equipmentAttach'
			}, {
				name : 'remark'
			}, {
				name : 'department'
			}, {
				name : 'model'
			}, {
				name : 'equipNumber'
			}, {
				name : 'status'
			}, {
				name : 'originalUnit'
			}, {
				name : 'nowUnit'
			}, {
				name : 'lifeYears'
			}, {
				name : 'changeTime',
				type : 'date',
				dateFormat : 'Y-m-d H:i:s'
			}])

	ProvokeStore = new Ext.data.Store({
				proxy : new Ext.data.HttpProxy({
							url : '/FAM/getProvokeServlet'
						}),
				reader : new Ext.data.JsonReader({
							root : 'result',
							totalProperty : 'total'
						}, ProvokeRecord)
			})

	var ProvokeGrid = new Ext.grid.GridPanel({
				width : '100%',
				height : 500,
				store : ProvokeStore,
				cm : ProvokeColumnModel,
				stripeRows : true,
				loadMask : true,
				viewConfig : {
					forceFit : true
				},
				plugins : new Ext.ux.PanelResizer({
							minHeight : 100
						}),
				tbar : ['查询的设备调拨明细信息(提示：~^0^~ 双击表格中的某行可以查看该行的详情 ~^0^~)', '->',
						{
							iconCls : 'query',
							text : ' 查  询',
							width : 100,
							style : 'margin-right:20px;',
							handler : function() {
								QueryWindows.show();
							}
						}],
				bbar : new Ext.PagingToolbar({
							pageSize : 15,
							store : ProvokeStore,
							displayInfo : true,
							plugins : new Ext.ux.ProgressBarPager()
						})
			})

	ProvokeGrid.addListener('rowdblclick', function(ProvokeGrid, rowIndex,
			event) // 监听GridPanel中某行双击查看详细信息事件
			{
				var record = ProvokeGrid.getStore().getAt(rowIndex);
				DetailProvokeWindow.show();
				DetailProvokeForm.getForm().loadRecord(record);
			})

	/*
	 * 显示资产详细信息的FormPanel -- DetailProvokeWindows的子元素
	 */

	var DetailProvokeForm = new Ext.form.FormPanel({
				frame : true,
				items : [{
							layout : 'column',
							labelAlign : 'right',
							labelWidht : 60,
							items : [{
										columnWidth : .5,
										layout : 'form',
										xtype : 'fieldset',
										title : '设备挑拔基本信息',
										autoHeight : true,
										defaults : {
											disabled : true,
											width : 150
										},
										defaultType : 'textfield',
										items : [{
													fieldLabel : '资产编号',
													name : 'assetNo'
												}, {
													fieldLabel : '设备名称',
													name : 'name'
												}, {
													fieldLabel : '资产类别',
													name : 'type'
												}, {
													fieldLabel : '使用部门',
													name : 'department'
												}, {
													fieldLabel : '设备型号',
													name : 'model'
												}, {
													fieldLabel : '设备状态',
													name : 'status'
												}, {
													fieldLabel : '设备序列号',
													name : 'equipNumber'
												}]
									}, {
										columnWidth : .5,
										layout : 'form',
										xtype : 'fieldset',
										title : '设备挑拔数据信息',
										defaults : {
											disabled : true,
											width : 150
										},
										autoHeight : true,
										style : 'margin-left: 20px;',
										defaultType : 'textfield',
										items : [{
													fieldLabel : '原负责人',
													name : 'originalPrincipal'
												}, {
													fieldLabel : '现负责人',
													name : 'nowPrincipal'
												}, {
													fieldLabel : '原使用单位',
													name : 'originalUnit'
												}, {
													fieldLabel : '现使用单位',
													name : 'nowUnit'
												}, {
													fieldLabel : '变动类别',
													name : 'changeType'
												}, {
													fieldLabel : '使用年限',
													name : 'lifeYears',
													xtype : 'numberfield'
												}, {
													fieldLabel : '调拨时间',
													name : 'changeTime',
													xtype : 'datefield',
													format : 'Y-m-d'
												}]
									}]
						}, {
							xtype : 'fieldset',
							title : '设备挑拔信息',
							defaults : {
								disabled : true,
								labelWidth : 60
							},
							autoHeight : true,
							labelAlign : 'right',
							labelWidht : 60,
							items : [{
										fieldLabel : '设备附件',
										width : 480,
										height : 25,
										xtype : 'textarea',
										name : 'equipmentAttach'
									}, {
										fieldLabel : '备注信息',
										width : 480,
										height : 25,
										xtype : 'textarea',
										name : 'remark'
									}]
						}]
			})

	/*
	 * windows -- 双击表格中某行时弹出资产详细信息的窗口
	 */
	var DetailProvokeWindow = new Ext.Window({
				title : '设备调拨明细详细信息(查看模式)',
				width : 650,
				height : 390,
				modal : true,
				resizable : false,
				closeAction : 'hide',
				items : [DetailProvokeForm],
				buttons : [{
							iconCls : 'back',
							text : '返回',
							handler : function() {
								DetailProvokeWindow.hide();
							}
						}]
			})

	/*
	 * 用Viewport布局查看资产信息的界面,分北部和中央分区 北部放查询的formPanel面板 中央放资产信息的GridPanel面板
	 */
	new Ext.Viewport({
				rendTo : Ext.getBody(),
				layout : 'border',
				items : [{
							region : 'center',
							layout : 'fit',
							items : [ProvokeGrid]
						}]
			})
}

var init = function() {
	Ext.QuickTips.init();
	Ext.form.Field.prototype.msgTarget = 'side';
	BuildQueryForm();
	BuildQueryWindows();
	BulidLayout();
	QueryWindows.show();
}

Ext.onReady(init)